package com.cg.controller;

import com.cg.common.Result;
import com.cg.entity.Region;
import com.cg.service.RegionService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 地区控制器
 */
@RestController
@RequestMapping("/api/region")
@Slf4j
public class RegionController {
    
    @Autowired
    private RegionService regionService;
    
    /**
     * 获取所有省份
     * @return 省份列表
     */
    @GetMapping("/provinces")
    public Result<List<Region>> getProvinces() {
        try {
            List<Region> provinces = regionService.getProvinces();
            return Result.success(provinces);
        } catch (Exception e) {
            log.error("获取省份列表失败", e);
            return Result.error("获取省份列表失败");
        }
    }
    
    /**
     * 根据省份代码获取城市列表
     * @param provinceCode 省份代码
     * @return 城市列表
     */
    @GetMapping("/cities/{provinceCode}")
    public Result<List<Region>> getCitiesByProvince(@PathVariable String provinceCode) {
        try {
            List<Region> cities = regionService.getCitiesByProvince(provinceCode);
            return Result.success(cities);
        } catch (Exception e) {
            log.error("获取城市列表失败，省份代码：{}", provinceCode, e);
            return Result.error("获取城市列表失败");
        }
    }
    
    /**
     * 根据城市代码获取区县列表
     * @param cityCode 城市代码
     * @return 区县列表
     */
    @GetMapping("/districts/{cityCode}")
    public Result<List<Region>> getDistrictsByCity(@PathVariable String cityCode) {
        try {
            List<Region> districts = regionService.getDistrictsByCity(cityCode);
            return Result.success(districts);
        } catch (Exception e) {
            log.error("获取区县列表失败，城市代码：{}", cityCode, e);
            return Result.error("获取区县列表失败");
        }
    }
    
    /**
     * 根据地区代码获取地区信息
     * @param code 地区代码
     * @return 地区信息
     */
    @GetMapping("/{code}")
    public Result<Region> getByCode(@PathVariable String code) {
        try {
            Region region = regionService.getByCode(code);
            if (region != null) {
                return Result.success(region);
            } else {
                return Result.error("地区不存在");
            }
        } catch (Exception e) {
            log.error("获取地区信息失败，地区代码：{}", code, e);
            return Result.error("获取地区信息失败");
        }
    }
    
    /**
     * 根据名称搜索地区
     * @param name 地区名称
     * @return 地区列表
     */
    @GetMapping("/search")
    public Result<List<Region>> searchByName(@RequestParam String name) {
        try {
            List<Region> regions = regionService.searchByName(name);
            return Result.success(regions);
        } catch (Exception e) {
            log.error("搜索地区失败，名称：{}", name, e);
            return Result.error("搜索地区失败");
        }
    }
}
